#include <iostream>
#include <map>
using namespace std;
template <typename T>
class Container
{
public:
    void Print(T &t)
    {
        for(auto &x : t)
        {
            std::cout<< "x.first: " << x.first << " x.second: " << x.second << std::endl;
        }
    }
};
template <typename T=long long>
// c++11前要求函数模版不能有默认参数，类模板和模板声明可以有默认参数
// 注意非常量左值引用不可以绑定到右值
void func(const T &x = 90LL)
{
    std::cout << "x: " << x << std::endl;
}
int main()
{
    std::map<char, int> c_i_map;
    c_i_map.insert(std::make_pair('a', 1));
    c_i_map.insert(std::make_pair('b', 2));
    c_i_map.insert(std::make_pair('c', 3));
    // C++11之前这种类似的会出现连续两个右括号时，会被解析为移位运算符，所以必须中间空开
    //Container<map<char, int> > ls;
    Container<map<char, int>> ls;
    ls.Print(c_i_map);
    func<long long>();
    func<long long>(100LL);
    return 0;
}
